package cn.wit.luohui.day13;

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

//创建一个服务器，接收客户端要求
//ServerSocket
//实现：能同时接收多个客户端的连接
public class Server {
	public static void main(String[] args) {
		// 端口不能用1024端口一下的
		ServerSocket server = null;

		try {
			server = new ServerSocket(6666);

			System.out.println("服务器启动了，准备接收。。。");

			// 接收一个客户端连接
			// 如果有客户端连接，accept会马上返回一个socket对象
			// 如果没有，accecpt方法会让当前的线程处于阻塞状态（等待？）

			while (true) {//
				Socket socket = server.accept();// socket代表连接上的客户端
				System.out.println("连上了一个客户端：" + socket.getInetAddress() + "端口：" + socket.getPort());
				new Thread(new ClientThread(socket)).start();
			}
		} catch (IOException e) {

			e.printStackTrace();
		} finally {
			Utils.closeQuietly(server);
		}
	}

}

// 作用：和每一个连接的客户端socket进行异步通信
class ClientThread implements Runnable {// 同步，让客户端排队，防止出错
	private DataInputStream in;// 数据输入流
	private Socket socket;

	public ClientThread(Socket socket) {
		this.socket = socket;
	}

	@Override
	public void run() {
		// 开始通信
		try {
			in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));

			while (true) {
				String message = in.readUTF();//
				System.out.println(message);//

				if ("88".equals(message)) {
					break;
				}
			}

		} catch (IOException e) {

			e.printStackTrace();
		}

	}

}
